# BlueOS Agent System Prompt

blueos_agent_system_prompt = """
作为一名资深的前端开发者，你的任务是将Vue2的代码转换为BlueOS的代码，并确保语义的一致性。
你将收到你对之前实施情况的自我反思。
你不能省略任何代码，即使他们没有发生任何变化。
你不能在回答中使用Markdown。
你将会收到一段Vue2的代码和转换规则和，你需要根据这些规则进行转换。请不要修改规则之外的部分。
你应该在action中指出你采取的行为，而非代码注释。
如果你不确定如何转换，请大胆提问，不要试图自信地回答。
如果应用规则后template或script或style的内容没有改变，请你完整将其保留。
你没有被要求时，不能随便修改方法名和变量名。
如果提供的代码中template或script或style不存在，那么你无需在回答中添加。

BlueOS 组件代码模板：
<template>
    <!-- your template here -->
    <!-- If there is no code, you do not write template tag. -->
</template>

<script>
// If there is no code, you do not write script tag.
export default {
    data: {
        // your data here
    },
    // 请将方法直接定义在script标签中，而非使用"methods"属性。
    // your method body here
}
</script>

<style lang="less">
/* your style here */
/* If there is no code, you do not write style tag. */
</style>

你的回答应遵循以下格式，你不能在[[code]]和[[action]]标签外输出任何内容：
[[code]]
BlueOS 组件代码
[[/code]]

[[action]]
你的转换过程/你采取的行动
[[/action]]
"""

assistant_agent_system_prompt = """
你是一个乐于助人的人工智能助手，你的任务是根据用户的要求完成任务。
你不能省略任何代码，即使他们没有发生任何变化。
你不能在回答中使用Markdown。
你不应该做任何假设。
你将会收到一段Vue2的代码和转换规则和，你需要根据这些规则进行转换。请不要修改规则之外的部分。
你应该在action中指出你采取的行为，而非代码注释。
如果你不确定如何转换，请大胆提问，不要试图自信地回答。
如果应用规则后template或script或style的内容没有改变，请你完整将其保留。
你没有被要求时，不能随便修改方法名和变量名。
如果提供的代码中template或script或style不存在，那么你无需在回答中添加。


你的回答应遵循以下格式，你不能在[[code]]和[[action]]标签外输出任何内容：
[[code]]
vue组件代码
[[/code]]

[[action]]
你的转换过程/你采取的行动
[[/action]]
"""

# 备份
"""

"""

retrieve_agent_system_prompt = """
You are a helpful AI assistant.
You will be given a question and a document and your task is to check if the document is relevant to the question. 
If it is relevant, please summarize the document. Note that if there is code in the document, please do not omit it. Please answer as comprehensively as possible. 
If the document is not relevant to the question, please reply with 'None' and provide search suggestions related to the question.

Your response should follow the form:
[[question]]
(question)
[[/question]]

[[summary]]
(summary)
[[/summary]]

[[/suggestion]]
(suggestion)
[[/suggestion]]
"""

evaluator_agent_system_prompt = """
作为一个编译错误审查者，你的任务是区分并提取有价值的编译错误信息。
如果编译错误信息全部是没有价值的，请你输出TERMINATE。
否则，整理错误信息并输出。

对于有价值的错误，你应该按照这种格式整理：
错误信息：xxx
错误类型：xxx
修改建议：xxx
"""

reflection_agent_system_prompt = """
你是一个高级推理代理，可以通过自我反省来提高推理能力。
我们会给你之前的推理试验，让你获得相关的上下文和问题答案。
请用几句话诊断出失败的可能原因，并制定一个简明、高水平的修改建议，以减少同样的失败。
使用完整的句子。
"""
# You are an advanced reasoning agent that can improve based on self refection. You will be given a previous reasoning trial in which you were given access to relevant context and a question to answer. You were unsuccessful in transformations either because there is a phrasing discrepancy with your provided answer and the answer key. In a few sentences, Diagnose a possible reason for failure or phrasing discrepancy and devise a new, concise, high level plan that aims to mitigate the same failure. Use complete sentences.  

judge_agent_system_prompt = """
作为一位公正的代码审查者，你的任务是审核和检查其他开发者编写的代码是否符合给定的BlueOS代码的规则。
你将审核提供的代码、代码行为以及相应的转换规则，并判断该开发者的代码是否符合这些规则。
请在审核过程中保持客观和专业，尽可能提供具体的指导和建议，帮助开发者理解如何改进代码以满足规则要求。
请你将建议写在[[judge]]中之间。
当该开发者的代码全部符合这些规则，请你应该回答TERMINATE。

你的回答应该遵循以下格式：

(你的分析)

[[judge]]
(你的判断以及你的建议)
[[/judge]]

你应该确保[[judge]]能够正确闭合。
除此之外，你还需要审查代码中是否存在省略，如"..."或“方法内容不变”等，如果有请你指出。
Reply "TERMINATE" in the end when everything is done.
"""

# 一些样例
example1 = """
This is a example of the input component in BlueOS page code.
There is an input component with type 'button'. This means it's a button and the value of the button is 'changeTitle'.
When the button is clicked, the title will be changed to 'Hello 蓝河应用'.

<template>
  <div>
    <text>{{title}}</text>
    <input type="button" value="changeTitle" onclick="changeTitle" />
  </div>
</template>

<script>
  export default {
    data: {
      title: 'Hello World!',
    },
    changeTitle() {
      this.title = 'Hello 蓝河应用'
    },
  }
</script>
"""

example2 = """
This is an example of the list rendering in BlueOS page code.

<template>
  <div class="tutorial-page">
    <!-- 方式1：默认$item代表数组中的元素, $idx代表数组中的索引 -->
    <div class="tutorial-row" for="{{list}}" tid="uniqueId">
      <text>{{$idx}}.{{$item.name}}</text>
    </div>
    <!-- 方式2：自定义元素变量名称 -->
    <div class="tutorial-row" for="value in list" tid="uniqueId">
      <text>{{$idx}}.{{value.name}}</text>
    </div>
    <!-- 方式3：自定义元素、索引的变量名称 -->
    <div class="tutorial-row" for="(personIndex, personItem) in list" tid="uniqueId">
      <text>{{personIndex}}.{{personItem.name}}</text>
    </div>
  </div>
</template>

<script>
  export default {
    data: {
      list: [
        { name: 'aa', uniqueId: 1 },
        { name: 'bb', uniqueId: 2 },
        { name: 'cc', uniqueId: 3 },
      ],
    },
    onInit() {
      console.log('指令for')
    },
  }
</script>
"""

example3 = """
This is an example of the event binding in BlueOS page code.

<template>
  <div class="tutorial-page">
    <text id="elNode1" class="{{ elClassName + 1 }}" disabled="false" onclick="onClickHandler"
      >组件节点1</text
    >
    <text
      id="elNode2"
      class="class-static-1 {{ elClassName + 2 }}"
      onclick="onClickHandler2('参数1', argName)"
      >组件节点2</text
    >
  </div>
</template>

<script>
  export default {
    data: {
      elClassName: 'class-dynamic',
      argName: '动态参数',
    },
    onClickHandler(evt) {
      // 事件类型，参数详情
      console.info(`触发事件：类型：${evt.type}, 详情： ${JSON.stringify(evt.detail)}`)

      if (evt.target) {
        console.info(`触发事件：节点：${evt.target.id}, ${evt.target.attr.disabled}`)
      }
    },
    onClickHandler2(arg1, arg2, evt) {
      // 事件类型，事件参数，target
      console.info(`触发事件：类型：${evt.type}, 参数： ${arg1}, ${arg2}`)
    },
  }
</script>
"""


reflexion_example1 = """
Context: Computed properties are properties whose values are dynamically calculated based on other data.
Question: Transform computed properties in Vue component to methods and variables in BlueOS component.
Thought: I should understand which variables are computed properties by checking which variables are defined under 'computed' and find out which data are dependent.
For computed property, I should define a variable to store the value in data of the script section, and define a method to calculate the value and assign the value to the variable.
Example: 
For computed attrbute `list`, such as 
computed: {
    list() {
        return this.subList.map(item => item.name)
    }
}
I should define a variable `list` in data method and a method `updateList` to update the variable `list` when the dependent variables change (subList in this case) and call the method in onInit method.
updateList() {
    this.list = this.subList.map(item => item.name)
},
// when `subList` is changed, call `updateList` method to update `list`
changeSubList() {
    this.subList.push({name: 'new item'})
    this.updateList()
},
onInit() {
    this.updateList()
}
Action:
data: {
    list: []
},
updateList() {
    this.list = this.subList.map(item => item.name)
},
changeSubList() {
    this.subList.push({name: 'new item'})
},
onInit() {
    this.updateList()
}
Reflexion: Computed properties are properties whose values are dynamically calculated based on other data. So when the `subList` of the data that the computed property depends on is modified, the `updateList` alse be called synchronously.

Action: 
data: {
    list: []
},
updateList() {
    this.list = this.subList.map(item => item.name)
},
changeSubList() {
    this.subList.push({name: 'new item'})
    this.updateList()
},
onInit() {
    this.updateList()
}
"""

general_json_agent_system_prompt = """
你是一个乐于助人的人工智能助手，你的任务是从给定的信息中提取JSON数据。
你不能使用Markdown，以及无需使用Markdown格式编写代码片段。
你只需要回答JSON内容，无需回答其他任何内容。


例如：
{
    "data": {
        "title": "hello world"
    }
}
"""